/**
 * @description order controller
 */

const Order=require('../models/Order')
const Address=require('../models/Address')
const Product=require('../models/Product')

/**
 * 创建订单
 * @param {String} username //用户名
 * @param {Object} data     //订单数据
 */

const setOrder=async function(username,data){
    const {
        addressId,
        shopId,
        shopName,
        isCanceled=false, //默认值false
        products=[]       //默认值  
    }=data

    //根据adderssId获取地址信息
    const address=await Address.findById(addressId)

    //获取商品列表
    const pIds=products.map(p=>p.id) //['商品1-id','商品2-id']
    const productList=await Product.find({
        shopId,
        _id:{
            $in:pIds
        }
    })

    //拼接上购买数量
    const productWithSales=productList.map(p=>{
        const id=p.id.toString()
        //通过商品id可以找到购买数量
        const filterProducts=products.filter(item=>item.id===id)
        if (filterProducts.length===0) {
            throw new Error('未找到匹配的销售数量')
        }
        return {
            product:p,
            orderSales:filterProducts[0].num
        }
    })
    const newOrder=await Order.create({
        username,
        shopId,
        shopName,
        address,
        isCanceled,
        products:productWithSales
    })
    return newOrder
}

async function getOrder(username){
    const order=await Order.find({
        username
    }).sort({_id:-1})
    return order
}

module.exports={
    setOrder,
    getOrder,
}